SUBROUTINE (RPT.ID)
** Version# 11.0302 - 12/22/2004 - 03:46pm - ETOLMACH - train
*** V11.03 Change - Add FULL Ver 20 - 04/28/2004 - JASONS - r7.basecode
*** V11.02 Change - Add FULL Ver 12 - 10/14/2003 - BILLW - r7.basecode
*** V11.01 Change - Add FULL Ver 16 - 10/17/2002 - CHUCKW - r7.basecode

*-------------------------------------------------------------------------*
*** Tommy Smith custom modifications
*-------------------------------------------------------------------------*
*** CMOD1   - Prevent file locking error by copying.
*** CMOD1.1 - Delete copy at close.
*-------------------------------------------------------------------------*

ETERM.OK = TEST.ETERM.VERSION(3.06)
WINDOW 1,2,78,21,3,,"Hold Entry Pre-View"

SEARCH.STRING = ''

PRINT @(0,19):'':
PRINT @(0,20):' Format  Search  Page Skip  Print  View Detail  Edit Detail ':
IF ETERM.OK THEN
JOIN.LINES 0,21,77,21
JOIN.LINES -1,0,-1,20
JOIN.LINES 78,0,78,20
END
READ RPT FROM RPTFILE,RPT.ID ELSE RPT = ''
LOCATE USER.ID IN RPT<36> SETTING UPOS ELSE UPOS = ''
IF UPOS # '' THEN VONLY = RPT<38,UPOS,1> ELSE VONLY = NO
MENU.CLEAR

IF VONLY THEN
MENU.LOAD  1,20, 6,1,'F'
MENU.LOAD 10,20, 6,1,'S'
MENU.LOAD 19,20, 9,7,'K'
MENU.LOAD ,,,,''
MENU.LOAD 39,20,11,1,'V'
MENU.LOAD 53,20,11,1,'E'
END ELSE
MENU.LOAD  1,20, 6,1,'F'
MENU.LOAD 10,20, 6,1,'S'
MENU.LOAD 19,20, 9,7,'K'
MENU.LOAD 31,20, 5,1,'P'
MENU.LOAD 39,20,11,1,'V'
MENU.LOAD 53,20,11,1,'E'
END

RESTART:  PRINT @(1,1):''
**********************************************************
*** ID  : CMOD1   - ETOLMACH 12/22/2004
*** DESC: If the file is fowarded to multiple users. Create
*** a copy to prevent a file lock.
*** CMOD1.1 = Delete the file at close.

F.COUNT = DCOUNT(RPT<36>,VM)
IF F.COUNT > 1 THEN CREATE.COPY = 1 ELSE CREATE.COPY = ''

IF CREATE.COPY THEN
NRPT.ID = USER.ID:'.':RPT.ID
EXEC.C  = 'COPYI FROM &HOLD& TO &HOLD& ':RPT.ID
EXEC.C := ',':NRPT.ID
EXEC.D  = 'DELETE &HOLD& ':NRPT.ID

MESS 10,2,BELL:'Please Wait. Copying file...'
EXECUTE EXEC.C CAPTURING MSG
END ELSE
NRPT.ID = RPT.ID
END
***********************************************************

OPENSEQ '&HOLD&',NRPT.ID TO HOLDFILE LOCKED
MENU.CLEAR
MESS 10,2,BELL:'This report is being viewed by another user. Please try again later'
IN$$1:       INP A,,,'0'
WINDOW.CLOSE
RETURN
END ELSE
MENU.CLEAR
MESS 10,2,BELL:'Report Not Found  '
CLOSESEQ HOLDFILE
IN$$2:       INP A,,,'0'
WINDOW.CLOSE
RETURN
END

*-------------------------------------------------------------------------*
GOSUB SET.UP
IF NOT(FAIL) THEN
LOOP
PRINT @(40,DLINE+TOP):
IN$$3:    INP.VIEW

BEGIN CASE
CASE MOVE = 2;      GOSUB UP.ONE
CASE MOVE = 4;      GOSUB DOWN.ONE
CASE LASTKEY = 12;  GOSUB PAGE.UP
CASE LASTKEY = 14;  GOSUB PAGE.DOWN
CASE LASTKEY = 161; GOSUB TOP.PAGE
CASE LASTKEY = 163; GOSUB BOTTOM.PAGE
CASE LASTKEY = 154; GOSUB SCROLL.WINDOW
END CASE

UNTIL QUIT DO REPEAT
END

FINISH:   WINDOW.CLOSE

CLOSESEQ HOLDFILE
*** *** *** ***
*** CMOD1.1    - ETOLAMCH 12/22/2004
IF CREATE.COPY THEN
EXECUTE EXEC.D CAPTURING MSG
END
*** *** *** ***
RETURN
*-------------------------------------------------------------------------*
SET.UP:   FAIL = 0
DET.LINES = ''
READ RPT FROM RPTFILE, RPT.ID THEN
PRINT WRAPOFF$:
CURRENT.LINE  = 1
TOP.LINE      = 1
WIDTH         = RPT<2>
HDR           = RPT<8>
IF RPT<33> THEN
HDR = INSERT(HDR,1,1;'User Heading : ':RPT<33>)
END
FTR           = RPT<9>
LAST.LINE     = RPT<10>
SCOL          = RPT<13,1>
ECOL          = RPT<14>
SROW          = RPT<15>
EROW          = RPT<16>
HDR.LGTH      = DCOUNT(HDR,VM)
IF HDR.LGTH > 14 THEN HDR.LGTH = 14
FTR.LGTH      = DCOUNT(FTR,VM)
IF SCOL       = '' THEN SCOL = 0
IF ECOL       = '' THEN ECOL = 77
IF SROW       = '' THEN SROW = 0
IF EROW       = '' THEN EROW = 18
*** This limit is imposed by the Eclipse to Eterm protocol
IF WIDTH > 223 THEN WIDTH = 223
GOSUB VERIFY.PARAMETERS
TOP           = HDR.LGTH + 1
BOTM          = 18 - FTR.LGTH
LINES.ON.SCREEN = 18 - HDR.LGTH - FTR.LGTH
NO.BODY.LINES = 50
FORMAT.STRING = "L#":WIDTH
SET.VIEW SCOL,ECOL,SCRWID,SROW,EROW
GOSUB DISPLAY.HEADING
GOSUB PRINT.PAGE
DLINE = 0
END ELSE FAIL = 1
RETURN
*-------------------------------------------------------------------------*
UP.ONE:
BEGIN CASE
CASE DLINE > 0;             DLINE -= 1
CASE TOP.LINE > 1
READLINE HOLDFILE,CURRENT.LINE,TOP.LINE - 1,LINE
SCROLL.DOWN 0,TOP,77,BOTM
CONVERT CHAR(12) TO ' ' IN LINE
PR.Y = TOP
PR.LINE = LINE
GOSUB PRINT.ONE
IF ETERM.OK THEN
IF EROW<BOTM THEN
PR.Y = EROW+1
READLINE HOLDFILE,CURRENT.LINE,TOP.LINE+LINES.ON.SCREEN+EROW-BOTM-1,PR.LINE
GOSUB PRINT.ONE
END
IF SROW>TOP THEN
PR.Y = SROW
READLINE HOLDFILE,CURRENT.LINE,TOP.LINE+SROW-TOP-1,PR.LINE
GOSUB PRINT.ONE
END
END
TOP.LINE = TOP.LINE - 1
DET.LINES = INSERT(DET.LINES,1;LINE)
DET.LINES = DELETE(DET.LINES,LINES.ON.SCREEN+1)
CASE OTHERWISE
BAD.BEEP
END CASE
RETURN
*-------------------------------------------------------------------------*
DOWN.ONE: BEGIN CASE
CASE DLINE+TOP < 18;     DLINE += 1
CASE (TOP.LINE + LINES.ON.SCREEN <= LAST.LINE)
READLINE HOLDFILE,CURRENT.LINE,TOP.LINE + LINES.ON.SCREEN,LINE
SCROLL.UP 0,TOP,77,BOTM
CONVERT CHAR(12) TO ' ' IN LINE
PR.Y = BOTM
PR.LINE = LINE
GOSUB PRINT.ONE
IF ETERM.OK THEN
IF EROW<BOTM THEN
PR.Y = EROW
READLINE HOLDFILE,CURRENT.LINE,TOP.LINE+LINES.ON.SCREEN+EROW-BOTM,PR.LINE
GOSUB PRINT.ONE
END
IF SROW>TOP THEN
PR.Y = SROW-1
READLINE HOLDFILE,CURRENT.LINE,TOP.LINE+SROW-TOP,PR.LINE
GOSUB PRINT.ONE
END
END
TOP.LINE = TOP.LINE + 1
DET.LINES = DELETE(DET.LINES,1)
DET.LINES<LINES.ON.SCREEN> = LINE
CASE OTHERWISE
BAD.BEEP
END CASE
RETURN
*-------------------------------------------------------------------------*
PRINT.ONE:*
WK.LINE = CHANGE(PR.LINE,ESC:'WO','$WO',-1)
WK.LINE = CHANGE(WK.LINE,ESC:'WC','$WC',-1)
WK.LINE = CHANGE(WK.LINE,ESC:'CO','$CO',-1)
WK.LINE = CHANGE(WK.LINE,ESC:'CC','$CC',-1)
WK.LINE = CHANGE(WK.LINE,ESC:'Y','$Y',-1)
PRINT @(0,PR.Y):WK.LINE FORMAT.STRING:
IF ETERM.OK AND ECOL<78 THEN
PR.TEMP = WK.LINE FORMAT.STRING
PRINT PR.TEMP[ECOL+2,78-ECOL]
END
PRINT
RETURN
*-------------------------------------------------------------------------*
PAGE.UP:  IF TOP.LINE - LINES.ON.SCREEN <= 1 THEN
SEEK HOLDFILE,0,0 ELSE NULL
CURRENT.LINE = 1
TOP.LINE = 1
END ELSE
TOP.LINE = TOP.LINE - LINES.ON.SCREEN
END
GOSUB PRINT.PAGE
RETURN
*-------------------------------------------------------------------------*
PAGE.DOWN: ***
OK = (TOP.LINE + LINES.ON.SCREEN <= LAST.LINE)
IF OK THEN
TOP.LINE = TOP.LINE + LINES.ON.SCREEN
GOSUB PRINT.PAGE
END ELSE
BAD.BEEP
END
RETURN
*-------------------------------------------------------------------------*
TOP.PAGE: SEEK HOLDFILE,0,0 THEN
CURRENT.LINE = 1
TOP.LINE     = 1
GOSUB PRINT.PAGE
END
RETURN
*-------------------------------------------------------------------------*
BOTTOM.PAGE: ***
SEEK HOLDFILE,0,2 THEN
CURRENT.LINE = LAST.LINE + 1
TOP.LINE = LAST.LINE - LINES.ON.SCREEN + 1
IF TOP.LINE < 1 THEN TOP.LINE = 1
GOSUB PRINT.PAGE
END
RETURN
*-------------------------------------------------------------------------*
PRINT.PAGE: ***
PRINT @(0,TOP):
IF TOP.LINE <= LAST.LINE THEN
FOR Z = 1 TO LINES.ON.SCREEN
WANTED.LINE = TOP.LINE + Z - 1
READLINE HOLDFILE,CURRENT.LINE,WANTED.LINE,LINE
CONVERT CHAR(12) TO ' ' IN LINE
IF CURRENT.LINE > LAST.LINE+1 THEN LINE = ''
IF WANTED.LINE  > LAST.LINE   THEN LINE = ''
PR.Y = TOP+Z-1
PR.LINE = LINE
GOSUB PRINT.ONE
DET.LINES<Z> = LINE
NEXT Z
IF CURRENT.LINE > LAST.LINE + 1 THEN
SEEK HOLDFILE,0,2 THEN CURRENT.LINE = LAST.LINE + 1
END
END
RETURN
*-------------------------------------------------------------------------*
SUBS:     ON OPTION GOTO CHNG.FMT, SEARCH.STRING, PAGE.SKIP, PRT.IT, VIEW.IT, VIEW.IT
*-------------------------------------------------------------------------*
SCROLL.WINDOW: *
SCROLLABLE.VIEW.START 0,0,78,19,WIDTH,RESULT
IF RESULT THEN
FOR X = 1 TO HDR.LGTH
PRINT HDR<1,X> FORMAT.STRING
NEXT X
PRINT
SEEK HOLDFILE,0,0 THEN CURRENT.LINE = 1
FOR Z = 1 TO LAST.LINE
READLINE HOLDFILE,CURRENT.LINE,Z,LINE
CONVERT CHAR(12) TO ' ' IN LINE
PRINT LINE FORMAT.STRING
NEXT Z
FOR X = 1 TO FTR.LGTH
PRINT FTR<1,X> FORMAT.STRING
NEXT X
SCROLLABLE.VIEW.END
END
RETURN
*-------------------------------------------------------------------------*
*** Adjust row and column parameters to match the actual window size
*-------------------------------------------------------------------------*
VERIFY.PARAMETERS:*
IF EROW > 18 THEN EROW = 18
IF SROW > EROW THEN SROW = EROW
IF ECOL > 77 THEN ECOL = 77
IF SCOL > ECOL THEN SCOL = ECOL
SCRWID = WIDTH-SCOL
RETURN
*-------------------------------------------------------------------------*
CHNG.FMT: CHANGE.SET.VIEW SCOL,ECOL,SCRWID,SROW,EROW
GOSUB VERIFY.PARAMETERS
SET.VIEW SCOL,ECOL,SCRWID,SROW,EROW
GOSUB DISPLAY.HEADING
GOSUB PRINT.PAGE
RETURN
*-------------------------------------------------------------------------*
PRT.IT:   CLOSESEQ HOLDFILE
PRINT.REPORT RPT.ID
SLEEP 1
RELOCK:   OPENSEQ '&HOLD&',NRPT.ID TO HOLDFILE LOCKED GOTO RELOCK ELSE NULL
CLOSESEQ HOLDFILE
RETURN TO RESTART
*-------------------------------------------------------------------------*
VIEW.IT:  LINE = DET.LINES<DLINE+1>
VIEW.ONLY = (OPTION#6)
UT.VIEW.EDIT.STR LINE,VIEW.ONLY
RETURN
*-------------------------------------------------------------------------*
DISPLAY.HEADING: ***
FOR X = 1 TO HDR.LGTH
PRINT @(0,X - 1):HDR<1,X> FORMAT.STRING
NEXT X
FOR X = 1 TO FTR.LGTH
PRINT @(0,18 - FTR.LGTH + X):FTR<1,X> FORMAT.STRING
NEXT X
RETURN
*-------------------------------------------------------------------------*
SEARCH.STRING: ***
WINDOW 2,3,70,1,0
PRINT @(0,1):'Search String : ':SEARCH.STRING "L#50":
IN$$4:    INP SEARCH.STRING,16,0,50,"MCU"
WINDOW.CLOSE
IF NOT(QUIT) THEN
TEMP.LINE = TOP.LINE + 1
DONE = 0
LOOP
WANTED.LINE = TEMP.LINE
READLINE HOLDFILE,CURRENT.LINE,WANTED.LINE,STRING
STRING = OCONV(STRING,"MCU")
IF INDEX(STRING,SEARCH.STRING,1) THEN
TOP.LINE = WANTED.LINE
GOSUB PRINT.PAGE
DONE = 1
END
TEMP.LINE = TEMP.LINE + 1
IF TEMP.LINE > LAST.LINE THEN
DONE = 1
GOSUB PRINT.PAGE
END
UNTIL DONE DO REPEAT
END
DLINE = 0
PRINT @(40,DLINE+TOP):

RETURN
*-------------------------------------------------------------------------*
PAGE.SKIP: ***
WINDOW 2,3,21,1,0
PRINT @(0,1):'Page to View : ':
IN$$5:    INP PAGE,15,0,4,"R"
IF PAGE = '' AND NOT(QUIT) THEN PRINT BELL:; GOTO IN$$5
WINDOW.CLOSE
IF NOT(QUIT) THEN
TOP.LINE = (NO.BODY.LINES * (PAGE - 1 )) + 1
IF TOP.LINE <= LAST.LINE THEN
GOSUB PRINT.PAGE
END ELSE
GOSUB BOTTOM.PAGE
END
END
RETURN
!ETOLMACH~12/22/04~15:46
